#include "parser.h"

#include <stdio.h>
#include <string.h>
#include <ctype.h>

char* proximaPalabra (FILE* archivo)
{
	if (feof(archivo)) {
		return NULL;
	}

	char buffer[100];
	size_t index = 0;

	int c;
	while (EOF != (c = fgetc(archivo))) {
		if (isalnum(c)) {
			buffer[index++] = c;
		} else {
			if (index != 0) {
				break;
			}
		}
		// TODO: si hace falta, pasar a tirar error si index==100, o a buffer dinamico
	}

	if (index == 0) {
		return NULL;
	} else {
		buffer[index] = '\0';
		return strdup(buffer);
	}
}

void parsearArchivos(char** archivosAOrdenar, size_t* sizeArchivos, char*** words, int* arraysize)
{
	/* parametros para el vector words */
	const size_t wordsAlocado_base = 256;
	const size_t factor_crecimiento = 2;

	size_t wordsAlocado = wordsAlocado_base;
	*words = malloc(wordsAlocado * sizeof(char*));

	unsigned i;
	for (i = 0; i < *sizeArchivos; ++i) {
		char *nombreArchivo = archivosAOrdenar[i];
		FILE *archivo = fopen(nombreArchivo, "r");

		char *palabra = proximaPalabra(archivo);
		while (palabra != NULL) {
			if (wordsAlocado == *arraysize) {
				wordsAlocado *= factor_crecimiento;
				*words = realloc(*words, wordsAlocado * sizeof(char*));
			}
			(*words)[*arraysize] = palabra;
			*arraysize += 1;
			palabra = proximaPalabra(archivo);
		}
		fclose(archivo);
	}
	*words = realloc(*words, *arraysize * sizeof(char*));
}
